home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
pc
/
LOGIC Apple II 5.25" Library - DOS Part 2
/
DOS047.dsk
/
DISK SORT-VER 3.3.bas
< prev
next >
Wrap
BASIC Source File
|
2012-02-16
|
9KB
|
194 lines
100 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>*************************
110 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* *
120 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* DISK SORT VERSION 2.0 *
130 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* BY TED COHN *
140 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* (C) FEBRUARY 1981 *
150 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* ALL RIGHTS RESERVED *
160 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* S.F. APPLE CORE *
170 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* ..................... *
180 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* *
190 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* MS: MAX SECTORS/TRACK *
200 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* (15 FOR DOS 3.3) *
210 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* MF: MAX FILES/CATALOG *
220 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* (NORMALLY 80) *
230 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* R: EXTERNAL MACHINE *
240 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* LANGUAGE ROUTINE *
250 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* B: DATA BUFFER ADDR. *
260 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>* *
270 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H>*************************
280 LOMEM: ( PEEK(176) +2) *256
290 MS = 15
300 MF = 80
310 RD = 1
320 WR = 2
330 D$ = CHR$(4)
340 M$ = CHR$(13)
350 E$ = CHR$(27)
360 Q$ = CHR$(34)
370 R = PEEK(175) + PEEK(176) *256 -100
380 B = ( PEEK(176) +1) *256
390 POKE 7, INT(B/256)
400 DIM F$(MF),P%(MF),T%(MF),S%(MF),L%(MF),E%(MF),Q%(MF)
410 HOME : TEXT : POKE -16298,0: GOTO 470
420 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>CENTERING ROUTINE<CTRL-J><CTRL-J>
430 CALL -958: HTAB 20 - LEN(C$)/2
440 PRINT C$: PRINT
450 RETURN
460 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>TITLE PAGE INFORMATION<CTRL-J><CTRL-J>
470 VTAB 5:C$ = "DISK SORT": GOSUB 420
480 C$ = "BY TED COHN": GOSUB 420
490 C$ = "COPYRIGHT (C) 1981": GOSUB 420
500 C$ = "ALL RIGHTS RESERVED.": GOSUB 420
510 C$ = "SAN FRANCISCO APPLE CORE": GOSUB 420
520 C$ = "FOR DOS 3.2": IF MS = 15 THEN C$ = LEFT$(C$,10) +"3"
525 GOSUB 420: GOSUB 1950
530 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>ASK FOR INSTRUCTIONS<CTRL-J><CTRL-J>
540 HOME : VTAB 10: PRINT TAB( 10)"INSTRUCTIONS? (Y/N) ";
550 GET C$: IF C$ = "Y" THEN 930
560 IF C$ = E$ THEN 2000
570 IF C$ < >"N" THEN 550
580 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>ASK FOR TYPE OF SORT<CTRL-J><CTRL-J>
590 HOME : VTAB 6
600 C$ = "CHOOSE ONE OF THE FOLLOWING SORTS:": GOSUB 420: PRINT
610 C$ = "(1) SORT BY FILE NAMES ": GOSUB 420
620 C$ = "(2) SORT BY FILE TYPES ": GOSUB 420
630 C$ = "(3) SORT BY FILE SECTORS": GOSUB 420
640 PRINT : PRINT " ENTER THE NUMBER OF DESIRED SORT?";
650 GET C$:ST = VAL(C$)
660 IF C$ = E$ THEN 2000
670 IF ST <1 OR ST >3 THEN 650
680 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>MAIN PROGRAM SEGMENT<CTRL-J><CTRL-J>
690 GOSUB 730: GOSUB 1300: GOSUB 1410
700 ON ST GOTO 1720,1520,1620
710 END
720 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>PLACE DISK IN DRIVE<CTRL-J><CTRL-J>
730 CALL R +65
740 SL = PEEK(3):DR = PEEK(4)
750 HOME : VTAB 6
760 PRINT "DISK SPECIFICATIONS": PRINT : PRINT
770 PRINT " SLOT : "SL;: HTAB 13
780 GET C$:C = VAL(C$): IF C$ = E$ THEN 2000
790 IF C$ = M$ THEN PRINT : GOTO 830
800 IF C <1 OR C >7 THEN 780
810 SL = C
820 PRINT SL
830 PRINT : PRINT " DRIVE : "DR;: HTAB 13
840 GET C$:C = VAL(C$): IF C$ = E$ THEN 2000
850 IF C$ = M$ THEN PRINT : GOTO 890
860 IF C <1 OR C >2 THEN 840
870 DR = C
880 PRINT DR
890 POKE 3,SL: POKE 4,DR
900 PRINT : PRINT : PRINT "INSERT DISK AND PRESS RETURN";: GET C$: IF C$ = E$ THEN 2000
910 HOME : VTAB 7:C$ = "DISK SORT VERSION 2.0": INVERSE : GOSUB 420: NORMAL : RETURN
920 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>PRINT INSTRUCTIONS<CTRL-J><CTRL-J>
930 HOME
940 PRINT "---------------------------------------": INVERSE : PRINT " DISK SORT ": NORMAL : PRINT "---------------------------------------": PRINT
950 PRINT "DISK SORT WILL REARRANGE THE FILE NAMES"
960 PRINT "OF A DISK CATALOG INTO ALPHABETICAL"
970 PRINT "ORDER. YOU HAVE THE OPTION OF SORTING"
980 PRINT "A FILE BY ITS TYPE. INTEGER FILES ARE"
990 PRINT "PLACED ON THE CATALOG FIRST, APPLESOFT"
1000 PRINT "FILES SECOND, BINARY FILES THIRD, AND"
1010 PRINT "TEXT FILES LAST. YOU MAY ALSO SORT A"
1020 PRINT "FILE BY ITS SECTOR LENGTH.": PRINT
1030 PRINT "AFTER CHOOSING THE TYPE OF SORT YOU"
1040 PRINT "WISH, ENTER THE DRIVE SPECIFICATIONS,"
1050 PRINT "THEN HIT RETURN TO BEGIN THE SORT."
1060 PRINT "THE RED LIGHT ON THE DISK DRIVE WILL"
1070 PRINT "BLINK FOR A WHILE --- IT IS READING THE"
1080 PRINT "DISK --- ";: FLASH : PRINT "DO NOT REMOVE UNTIL THROUGH!!!": NORMAL
1090 PRINT "DISK SORT WAS DEVELOPED SO USERS COULD"
1100 PRINT "SPOT PROGRAMS ON CATALOGS MORE QUICKLY."
1110 GOSUB 1950: POKE 34,4: HOME : POKE 34,0: VTAB 5
1120 PRINT "THIS PROGRAM WILL WORK ON EITHER"
1130 PRINT "DOS 3.2, DOS 3.2.1, OR DOS 3.3. FOR USE"
1140 PRINT "WITH DOS 3.3, MAKE SURE THAT YOU CHANGE"
1150 PRINT "THE VARIABLE 'MS' IN LINE 290 FROM 12"
1160 PRINT "TO 15, THEN RESAVE DISK SORT.": PRINT
1170 PRINT "DISK SORT IS PUBLIC DOMAIN, AND MAY BE"
1180 PRINT "COPIED AND DISTRIBUTED WITHOUT CHARGE."
1190 PRINT "HOWEVER, ALL RIGHTS ARE RESERVED, AND"
1200 PRINT "DISK SORT MAY NOT BE SOLD.": PRINT
1210 PRINT "WHEN COPYING, DON'T WORRY ABOUT COPYING"
1220 PRINT "ANOTHER MACHINE LANGUAGE FILE ( AS IN"
1230 PRINT "THE OLD VERSION). THE MACHINE LANGUAGE"
1240 PRINT "ROUTINES ARE TACKED TO THE END OF THIS"
1250 PRINT "PROGRAM, AND DISK SORT MAY BE COPIED BY"
1260 PRINT "SIMPLY LOADING AND SAVING THROUGH BASIC.";
1270 GOSUB 1950
1280 GOTO 590
1290 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>READ DIRECTORY IMAGE FROM DISK<CTRL-J><CTRL-J>
1300 N = -1
1310 VTAB 10:C$ = "READING DIRECTORY": GOSUB 420
1320 FOR S = MS TO 1 STEP -1
1330 VTAB 12: HTAB 10: PRINT "TRACK/SECTOR: 17,"S" "
1340 POKE 0,17: POKE 1,S: POKE 2,RD: CALL R
1350 FOR I = B +14 TO B +255 STEP 35: IF PEEK(I) = 0 THEN 1400
1355 IF PEEK(I -3) = 255 THEN 1390
1360 N = N +1
1370 P%(N) = PEEK(I -1):T%(N) = PEEK(I -3):S%(N) = PEEK(I -2):L%(N) = PEEK(I +30):E%(N) = PEEK(I +31):F$(N) = ""
1380 FOR J = 0 TO 29:F$(N) = F$(N) + CHR$( PEEK(I +J)): NEXT
1390 NEXT : NEXT
1400 FOR I = 0 TO N:Q%(I) = I: NEXT : RETURN
1410 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>SIMPLE ALPABETIC BUBBLE SORT ROUTINE (SORRY IT'S SLOW!)<CTRL-J><CTRL-J>
1420 VTAB 10:C$ = "SORTING DIRECTORY": GOSUB 420
1430 F = 0
1440 FOR I = 0 TO N -1
1450 X = Q%(I):Y = Q%(I +1)
1460 IF F$(X) < = F$(Y) THEN 1490
1470 Q%(I) = Y:Q%(I +1) = X
1480 F = 1
1490 NEXT
1500 IF F THEN 1430
1510 RETURN
1520 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>TYPE SORT<CTRL-J>
1530 F = 0
1540 FOR T = 0 TO 4: IF T = 3 THEN 1590
1550 FOR I = 0 TO N
1560 X = P%(I) -128: IF X <0 THEN X = X +128
1570 IF X = T THEN Q%(F) = I:F = F +1
1580 NEXT
1590 NEXT
1600 GOTO 1720
1610 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>SECTOR SORT<CTRL-J><CTRL-J>
1620 F = 0
1630 FOR I = 0 TO N -1
1640 IF L%(Q%(I)) < = L%(Q%(I +1)) THEN 1670
1650 X = Q%(I):Q%(I) = Q%(I +1):Q%(I +1) = X
1660 F = 1
1670 NEXT
1680 IF F THEN 1620
1690 GOTO 1720
1700 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>CLEAR DATA BUFFER<CTRL-J><CTRL-J>
1710 FOR Z = B TO B +255: POKE Z,0: NEXT : RETURN
1720 REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H> <CTRL-J><CTRL-J>WRITE NEW DIRECTORY IMAGE BACK TO DISK<CTRL-J><CTRL-J>
1730 C$ = "WRITING DIRECTORY": VTAB 10: GOSUB 420
1740 I = 0
1750 FOR S = MS TO 1 STEP -1
1760 VTAB 12: HTAB 10: PRINT "TRACK/SECTOR: 17,"S" "
1770 GOSUB 1710
1780 POKE B +1,17: POKE B +2,S -1
1790 FOR J = B +11 TO B +255 STEP 35
1800 X = Q%(I)
1810 POKE J,T%(X): POKE J +1,S%(X)
1820 POKE J +2,P%(X): POKE J +33,L%(X)
1830 POKE J +34,E%(X)
1840 FOR K = 1 TO 30: POKE J +K +2, ASC( MID$ (F$(X),K,1)): NEXT
1850 POKE 0,17: POKE 1,S: POKE 2,WR: CALL R
1860 I = I +1: IF I >N THEN S = S -1: GOTO 1890
1870 NEXT
1880 NEXT
1890 IF S = 0 THEN 1930
1895 GOSUB 1710:X = S
1900 FOR S = X TO 1 STEP -1
1910 POKE 0,17: POKE 1,S: POKE 2,WR: POKE B +1,17: POKE B +2,S -1: CALL R
1920 NEXT
1930 HOME : PRINT D$"CATALOGS"SL",D"DR
1940 END
1950 VTAB 23: HTAB 4
1960 INVERSE : PRINT "ESC";: NORMAL : PRINT " TO QUIT, ";: INVERSE : PRINT "SPACEBAR";: NORMAL : PRINT " TO CONTINUE";
1970 GET C$
1980 IF C$ = " " THEN RETURN
1990 IF C$ < >E$ THEN 1970
2000 HOME : END